package com.itlaobing.param;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;

@WebServlet("/sign/up/*")
public class SignUpServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 从 HttpServletRequest 实例中获取 HTTP请求 中包含的 请求参数 ( request parameter )

        //古 方式1

        /*
        Enumeration<String> param = request.getParameterNames();
        while (param.hasMoreElements()){
            String name = param.nextElement();
            //System.out.println(name);
            //String value = request.getParameter(name);
            //System.out.println(name + ":" + value);
            String[] values = request.getParameterValues(name);
            System.out.println(name + ":" + Arrays.toString(values));

         */
        //现 方式2

        /*
         *  Map集合不可以直接迭代，但可以通过获得相应的Set集合来迭代
         *      如：可以获得所以 key 组成的Set集合 或 获得所有的 entry 组成的Set集合
         */
        Map<String,String[]> paramMap = request.getParameterMap();
        Set< Map.Entry<String,String[]> > entrySet = paramMap.entrySet();

        /*      伪 想法，误 当真
         *  将 <k,v> 当作一个对象类型通过 entrySet()方法  包装 在Set集合中 形成Set<map.Entry<k,v>> Set集合迭代
         *   迭代器中获取的是 Map集合中 k-v 所以声明   map.Entry<k,v>类型（意思）的引用变量，
         *   引用变量通过 getKey() getValue() 方法来获取Map集合中的 k , v值
         */

        // 通过Iterator迭代器 迭代
        Iterator< Map.Entry<String,String[]> > iterator = entrySet.iterator();
        while (iterator.hasNext()){
            Map.Entry<String,String[]> entry= iterator.next();
            String name = entry.getKey();
            //System.out.println(name);
            String[] value = entry.getValue();
            //System.out.println(Arrays.toString(value) );
            System.out.println(name +" : "+ Arrays.toString(value) );
        }

        System.out.println("<hr>");

        //通过 foreach 迭代
        for ( Map.Entry<String,String[]> entry : entrySet ) {
            String name = entry.getKey();
            String[] values = entry.getValue();
            System.out.println(name + " : " + Arrays.toString(values));
        }
    }
}
